#include <framework/framework.h>

static int mm_test(void);

int
module_load(void)
{
	 mm_test();
	 return 0;
}

int
module_unload(void)
{
	 return 0;
}

int
mm_test(void)
{
	 void *v1, *v2, *v3;

	 ekf_kprintf("Testing valloc\n");

	 v1 = ekf_alloc(PAGE_SIZE);
	 v2 = ekf_alloc(PAGE_SIZE * 2);
	 v3 = ekf_alloc(PAGE_SIZE * 3);
	 ekf_kprintf("v1 = %08x, v2 = %08x, v3 = %08x\n", v1, v2, v3);
	 ekf_free(v1); ekf_free(v2); ekf_free(v3);
	 
	 v1 = ekf_alloc(PAGE_SIZE);
	 v2 = ekf_alloc(PAGE_SIZE * 2);
	 v3 = ekf_alloc(PAGE_SIZE * 3);
	 ekf_kprintf("v1 = %08x, v2 = %08x, v3 = %08x\n", v1, v2, v3);
	 ekf_free(v1); ekf_free(v2); ekf_free(v3);
	 
	 v1 = ekf_alloc(PAGE_SIZE);
	 v2 = ekf_alloc(PAGE_SIZE * 2);
	 v3 = ekf_alloc(PAGE_SIZE * 3);
	 ekf_kprintf("v1 = %08x, v2 = %08x, v3 = %08x\n", v1, v2, v3);
	 ekf_free(v1); ekf_free(v2); ekf_free(v3);

	 ekf_kprintf("Testing balloc\n");

	 v1 = ekf_balloc(PAGE_SIZE);
	 v2 = ekf_balloc(PAGE_SIZE * 2);
	 v3 = ekf_balloc(PAGE_SIZE * 3);
	 ekf_kprintf("v1 = %08x, v2 = %08x, v3 = %08x\n", v1, v2, v3);
	 ekf_bfree(v1); ekf_bfree(v2); ekf_bfree(v3);
	 
	 v1 = ekf_balloc(PAGE_SIZE);
	 v2 = ekf_balloc(PAGE_SIZE * 2);
	 v3 = ekf_balloc(PAGE_SIZE * 3);
	 ekf_kprintf("v1 = %08x, v2 = %08x, v3 = %08x\n", v1, v2, v3);
	 ekf_bfree(v1); ekf_bfree(v2); ekf_bfree(v3);
	 
	 v1 = ekf_balloc(PAGE_SIZE);
	 v2 = ekf_balloc(PAGE_SIZE * 2);
	 v3 = ekf_balloc(PAGE_SIZE * 3);
	 ekf_kprintf("v1 = %08x, v2 = %08x, v3 = %08x\n", v1, v2, v3);
	 ekf_bfree(v1); ekf_bfree(v2); ekf_bfree(v3);

	 ekf_kprintf("Testing malloc\n");

	 v1 = ekf_alloc(8);
	 v2 = ekf_alloc(10);
	 v3 = ekf_alloc(13);
	 ekf_kprintf("v1 = %08x, v2 = %08x, v3 = %08x\n", v1, v2, v3);
	 ekf_free(v1); ekf_free(v2); ekf_free(v3);
	 
	 v1 = ekf_alloc(8);
	 v2 = ekf_alloc(10);
	 v3 = ekf_alloc(13);
	 ekf_kprintf("v1 = %08x, v2 = %08x, v3 = %08x\n", v1, v2, v3);
	 ekf_free(v1); ekf_free(v2); ekf_free(v3);
	 
	 v1 = ekf_alloc(8);
	 v2 = ekf_alloc(10);
	 v3 = ekf_alloc(13);
	 ekf_kprintf("v1 = %08x, v2 = %08x, v3 = %08x\n", v1, v2, v3);
	 ekf_free(v1); ekf_free(v2); ekf_free(v3);

	 return 0;
}
